let Layer = require('./layer')

function Route() {
  this.stack = []
}

Route.prototype.get = function (handlers) {
  // 给 route 中添加层，这个层中需要存放方法名和 handler
  handlers.forEach(handler => {
    let layer = new Layer('/', handler)
    layer.method = 'get'
    this.stack.push(layer)
  })
}

Route.prototype.dispatch = function (req, res, out) {
  let idx = 0
  // 此 next 方法是用户调用的 next，
  // 如果调用 next，会执行内层中的 next 方法
  // 如果没有匹配到会调用外层的 next 方法
  let next = () => {
    if (idx >= this.stack.length) {
      return out()
    }
    let layer = this.dispatch.stack[idx++]
    // 当前 router 中的 layer 的方法匹配到了，执行此 layer 上的 handler
    if (layer.method === req.method.toLowerCase()) {
      layer.handle_request(req, res, next)
    } else {
      next()
    }
  }
  next()
}

module.exports = Route